Перейти к основному содержимому
Версия: 1.7.5

Обзор архитектуры

Модуль - это Docker-контейнер, который получает данные из внешней системы (CMDB, сканер, API) и передает их в SolarLighthouse в виде структурированных ассетов (хосты, аккаунты, сети, внешние адреса).

Схема взаимодействия

┌─────────────┐ ┌──────────────┐ ┌────────────┐ ┌───────────────┐
│ Внешняя │ │ Модуль │ │ Keeper │ │ Asset Manager │
│ система │◄────│ (ваш код) │◄────│ (module- │◄────│ │
│ (REST API) │ │ Docker │ │ manager) │ │ │
└─────────────┘ └──────────────┘ └────────────┘ └───────────────┘
│ │ │
│ GET /scan/status │ │
│◄───────────────────│ │
│ {status, data} │ │
│───────────────────►│ bulk import │
│ │───────────────────►│
│ POST /scan/ │ │
│ got-packet │ │
│◄───────────────────│ │
│ │ │
│ POST /scan/ │ │
│ shutdown │ │
│◄───────────────────│ │

Потоки данных:

  1. exs-go (Execution Service) инициирует запуск модуля через авторуло (autorule)

  2. Keeper (module-manager) скачивает Docker-образ модуля и запускает контейнер, передавая конфигурацию через config.yaml

  3. Модуль запускается, подключается к внешней системе, собирает данные и складывает их в SDK storage

  4. Keeper периодически опрашивает GET /scan/status модуля

  5. Когда данные готовы (статус ASSETS_READY), Keeper забирает пакеты данных и отправляет в Asset Manager через bulk import

  6. После получения данных Keeper отправляет POST /scan/got-packet для подтверждения

  7. По завершении Keeper отправляет POST /scan/shutdown для остановки контейнера

Ваша задача как разработчика модуля

Вам нужно написать одну функцию (custom_func), которая:

  • Подключается к внешнему API

  • Получает данные (хосты, ПО, сетевые интерфейсы и т.д.)

  • Преобразует их в модели SDK (CollectionHost, Package, NetInterfaces и др.)

  • Складывает в storage через scan_status_storage.append_host_in_storage()

Всю работу по HTTP-серверу, чанкингу данных, управлению статусами и взаимодействию с Keeper берет на себя SDK.